package com.sky.demo.singleton;

/**
 * Description:
 * 懒汉式 DLC Double Check Lock
 * 1、构造器私有化
 * 2、用一个静态变量保证这个唯一实例
 * 3、提供一个静态方法，获取这个实例
 * @author Sky
 * @Date 2021/7/31 11:15
 */
public class LazySingletonDCL {

    // 用一个静态变量保证这个唯一实例
    private static LazySingletonDCL INSTANCE;

    // 构造器私有化
    private LazySingletonDCL(){}

    // 提供一个静态方法，获取这个实例 Double Check Lock
    public static LazySingletonDCL getInstance(){

        if(INSTANCE == null){
            synchronized (LazySingletonDCL.class){
                if(INSTANCE == null){
                    INSTANCE = new LazySingletonDCL();
                }
            }
        }

        return INSTANCE;
    }

}
